/*
 * "@(#)AuctionDemo.java	1.33 01/06/22" 
 *
 * Copyright (c) 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

package example.auction;
 
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Vector;
import java.util.Timer;
import java.util.TimerTask;

public class AuctionDemo extends MIDlet implements CommandListener {
    Display display;

    public AuctionDemo() {
        display = Display.getDisplay(this);
    }

    public void destroyApp(boolean unconditional) {
    }

    public void pauseApp() {
    }

    Band band = new Band();

    static final Command BYE_CMD   = new Command("Exit", Command.STOP, 0);
    static final Command BACK_CMD  = new Command("Back", Command.SCREEN, 1);
    static final Command NEXT_CMD  = new Command("Next", Command.SCREEN, 2);
    static final Command MENU_CMD  = new Command("Main", Command.SCREEN, 2);
    static final Command SAVE_CMD  = new Command("Save", Command.SCREEN, 2);
    static final Command SUBMIT_CMD = new Command("Submit", Command.SCREEN, 2);
    static final Command ABOUY_CMD = new Command("About", Command.HELP, 30);

    Ticker 	ticker;
    Alert       notImpl, savedMsg, alertMsg;
    Canvas      welcome;
    List        mainMenu, cateMenu, aucMenu, bandList, ticketList, setMenu;
    Form        ticketForm, enterForm, bidForm, submitMsg;
    TextField   enterText, bidText;
    TextBox     addBand;
    Login       login = new Login();
    SetDate     date = new SetDate();
    SetTicker   setTicker = new SetTicker();
    Update      updateInt = new Update();
    UpdateAlert updateAlert = new UpdateAlert();
    Gauge 	submitGauge;
    RmBand      rmBand = new RmBand();

    Timer TimerService;


    public void startApp() {
        notImpl = new Alert("Sorry!!!", "Not Implemented", null, null);

        savedMsg = new Alert(null, "Your new settings have been saved!",
			     null, null);

        alertMsg = new Alert(null, "Your alerts have been saved!",
			     null, null);

        // submitMsg = new Alert(null);
        // submitMsg.append("Submitting bid...");

	submitGauge = new Gauge("", false, 100, 0);
	submitMsg = new Form("Submitting bid...");
        submitMsg.append(submitGauge);	
	

        ticker = new Ticker("");
        ticker.setString(band.toTickerString(null));

        welcome = new Canvas() {
                Image img = Image.createImage(dukeData, 0, dukeData.length);
                protected void paint(Graphics g) {
                    int x = (getWidth() - img.getWidth()) / 2;
                    int y = (getHeight() - img.getHeight()) / 2;
                    g.drawImage(img, x, y, 
                                Graphics.TOP | Graphics.LEFT);
                }
            };
        welcome.addCommand(MENU_CMD);
        welcome.addCommand(BYE_CMD);
        welcome.setCommandListener(this);
        display.setCurrent(welcome);

        mainMenu = new List("Main", Choice.IMPLICIT);
        mainMenu.append("Address List", null);
        mainMenu.append("Options", null);
        mainMenu.append("News", null);
        mainMenu.append("Auction", null);
        mainMenu.append("Traffic", null);
        mainMenu.append("Banking", null);
        mainMenu.append("Games", null);
        mainMenu.addCommand(BACK_CMD);
        mainMenu.setCommandListener(this);

        cateMenu = new List("Categories", Choice.IMPLICIT);
        cateMenu.append("Antiques", null);
        cateMenu.append("Books", null);
        cateMenu.append("Clothing", null);
        cateMenu.append("Computers", null);
        cateMenu.append("Jewelry", null);
        cateMenu.append("Pet Supplies", null);
        cateMenu.append("Stamps", null);
        cateMenu.append("Tickets", null);
        cateMenu.append("Toys", null);
        cateMenu.addCommand(BACK_CMD);
        cateMenu.setCommandListener(this);

        aucMenu = new List("Auction Menu", Choice.IMPLICIT);
        aucMenu.append("Ticket Info", null);
        aucMenu.append("Make a Bid", null);
        aucMenu.append("Set an Alert", null);
        aucMenu.append("Settings", null);
        aucMenu.append("About", null);
        aucMenu.addCommand(BACK_CMD);
        aucMenu.setCommandListener(this);
        aucMenu.setTicker(ticker);

        bandList = new List("Choose Band", Choice.IMPLICIT);
        bandList.addCommand(BACK_CMD);
        bandList.setCommandListener(this);
        bandList.setTicker(ticker);
        String[] list = band.getList();
        for (int i = 0; i < list.length; i++) {
            bandList.append(list[i], null);
        }

        ticketList = new List("dummy", Choice.IMPLICIT);
        ticketList.addCommand(BACK_CMD);
        ticketList.setCommandListener(this);

        ticketForm = new Form("dummy");
        ticketForm.append("dummy");
        ticketForm.addCommand(BACK_CMD);
        ticketForm.addCommand(MENU_CMD);
        ticketForm.setCommandListener(this);

        enterText = new TextField("", "", 10, TextField.NUMERIC);

        enterForm = new Form("Alert");
        enterForm.append("Tell me when bid reaches:");
        enterForm.append(enterText);
        enterForm.addCommand(BACK_CMD);
        enterForm.addCommand(SAVE_CMD);
        enterForm.setCommandListener(this);

        bidText = new TextField("", "", 10, TextField.NUMERIC);

        bidForm = new Form("dummy");
        bidForm.append("dummy");
        bidForm.append(bidText);
        bidForm.addCommand(BACK_CMD);
        bidForm.addCommand(NEXT_CMD);
        bidForm.setCommandListener(this);

        setMenu = new List("Settings", Choice.IMPLICIT);
        setMenu.append("Set Date & Time", null);
        setMenu.append("Ticker Tape", null);
        setMenu.append("Updates", null);
        setMenu.append("Add Bands", null);
        setMenu.append("Remove Bands", null);
        setMenu.addCommand(BACK_CMD);
        setMenu.setCommandListener(this);
        setMenu.setTicker(ticker);

        addBand = new TextBox("Add Bands,\nBands:", "", 100, TextField.ANY);
        addBand.addCommand(BACK_CMD);
        addBand.addCommand(SAVE_CMD);
        addBand.setCommandListener(this);
    }

    int chooseBandType = 0;

    public void commandAction(Command c, Displayable s) {
        if (s instanceof Canvas) {
            Canvas obj = (Canvas) s;
            if (obj == welcome) {
                if (c == MENU_CMD) { 
                    display.setCurrent(mainMenu);
                } else if (c == BYE_CMD) {
		    notifyDestroyed();
                }
            }
        } else if (s instanceof List) {
            List obj = (List) s;
            if (obj == mainMenu) {
                if (c == List.SELECT_COMMAND) {
                    int idx = obj.getSelectedIndex();
                    if (idx == 3) {
                        display.setCurrent(cateMenu);
                    } else {
                        display.setCurrent(notImpl);
                    }
                } else if (c == BACK_CMD) {
                    display.setCurrent(welcome);
                }
            } else if (obj == cateMenu) {
                if (c == List.SELECT_COMMAND) {
                    int idx = obj.getSelectedIndex();
                    if (idx == 7) {
                        display.setCurrent(aucMenu);
                    } else {
                        display.setCurrent(notImpl);
                    }
                } else if (c == BACK_CMD) {
                    display.setCurrent(mainMenu);
                }
            } else if (obj == aucMenu) {
                if (c == List.SELECT_COMMAND) {
                    int idx = obj.getSelectedIndex();
                    switch (idx) {
                    case 0:
                        chooseBandType = 0;
                        display.setCurrent(bandList);
                        break;
                    case 1:
                        chooseBandType = 1;
                        display.setCurrent(bandList);
                        break;
                    case 2:
                        chooseBandType = 2;
                        display.setCurrent(bandList);
                        break;
                    case 3:
                        display.setCurrent(setMenu);
                        break;
                    case 4:
                        example.About.showAbout(display);
                        break;
                    }
                } else if (c == BACK_CMD) {
                    display.setCurrent(cateMenu);
                }
            } else if (obj == bandList) {
                if (c == List.SELECT_COMMAND) {
                    int idx = obj.getSelectedIndex();
                    String bandName = band.getName(idx);
                    ticketList.setTitle(bandName);
                    reconstructList(ticketList, band.getTicketList(bandName));
                    display.setCurrent(ticketList);
                } else if (c == BACK_CMD) {
                    display.setCurrent(aucMenu);
                }
            } else if (obj == ticketList) {
                if (c == List.SELECT_COMMAND) {
                    int idx = obj.getSelectedIndex();
                    String bandName = ticketList.getTitle();
                    if (chooseBandType == 0) {
                        ticketForm.setTitle(bandName);
                        ticketForm.delete(0);
                        ticketForm.append(band.getTicketData(bandName, 
                                                                   idx));
                        display.setCurrent(ticketForm);
                    } else if (chooseBandType == 1) {
                        login.setID(bandName, band.getTicketID(bandName, idx));
                        bidForm.setTitle(null);
                        StringItem item = 
                            new StringItem("",
                                           band.getTicketBidTitle(bandName, 
                                                                  idx));
                        bidForm.set(0, item);
                        display.setCurrent(bidForm);
                    } else if (chooseBandType == 2) {
                        display.setCurrent(enterForm);
                    }
                } else if (c == BACK_CMD) {
                    display.setCurrent(bandList);
                }
            } else if (obj == setMenu) {
                if (c == List.SELECT_COMMAND) {
                    int idx = obj.getSelectedIndex();
                    switch (idx) {
                    case 0:
                        date.setDate();
                        display.setCurrent(date);
                        break;
                    case 1:
                        display.setCurrent(setTicker);
                        break;
                    case 2:
                        display.setCurrent(updateInt);
                        break;
                    case 3:
                        display.setCurrent(addBand);
                        break;
                    case 4:
                        display.setCurrent(rmBand);
                        break;
                    }
                } else if (c == BACK_CMD) {
                    display.setCurrent(aucMenu);
                }
            }
        } else if (s instanceof Form) {
            Form obj = (Form) s;
            if (obj == ticketForm) {
                if (c == BACK_CMD) {
                    display.setCurrent(ticketList);
                } else if (c == MENU_CMD) {
                    display.setCurrent(aucMenu);
                }
            } else if (obj == bidForm) {
                if (c == BACK_CMD) {
                    display.setCurrent(ticketList);
                } else if (c == NEXT_CMD) {
                    login.setBid(ticketList.getTitle(), bidText.getString());
                    display.setCurrent(login);
                }
            } else if (obj == enterForm) {
                if (c == BACK_CMD) {
                    display.setCurrent(ticketList);
                } else if (c == SAVE_CMD) {
                    updateAlert.set(ticketList.getTitle(), 
                                    enterText.getString());
                    display.setCurrent(alertMsg, aucMenu);
                }
            }
        } else if (s instanceof TextBox) {
            TextBox obj = (TextBox) s;
            if (obj == addBand) {
                if (c == BACK_CMD) {
                    display.setCurrent(setMenu);
                } else if (c == SAVE_CMD) {
                    updateBandList(addBand.getString());
                    display.setCurrent(savedMsg, setMenu);
                }
            }
        }
    }

    class Login extends Form implements CommandListener {
        TextField id = new TextField("", "", 10, TextField.ANY);
        TextField pd = new TextField("", "", 10, 
                                     (TextField.NUMERIC|TextField.PASSWORD));
        Form confirm = new Form("Confirm");
        Form notice = new Form("Alert");

        Login() {
            super(null);
            append("Please Enter Auction ID:");
            append(id);
            append("Password:");
            append(pd);
            addCommand(BACK_CMD);
            addCommand(NEXT_CMD);
            setCommandListener(this);

            confirm.append("dummy");
            confirm.addCommand(BACK_CMD);
            confirm.addCommand(SUBMIT_CMD);
            confirm.setCommandListener(this);

            notice.append("Your bid\n");
            notice.append("has been\n");
            notice.append("received.\n");
            notice.append("Confirm #:\n");
            notice.append("12-B455-31");
            notice.addCommand(BACK_CMD);
            notice.addCommand(MENU_CMD);
            notice.setCommandListener(this);
        }

        String band, bid, ticketID;

        void setBid(String band, String bid) {
            this.band = band;
            this.bid = bid;
        }

        void setID(String band, String ticketID) {
            this.band = band;
            this.ticketID = ticketID;
        }

        public void commandAction(Command c, Displayable s) {
            if (s instanceof Form) {
                Form obj = (Form) s;
                if (obj == this) {
                    if (c == BACK_CMD) {
                        display.setCurrent(bidForm);
                    } else if (c == NEXT_CMD) {
                        String str = "# " + ticketID + "\n" +
                            band + "\n" + 
                            "Bid Amount:\n" + 
                            "$" + bid;
                        confirm.delete(0);
                        confirm.append(str);
                        display.setCurrent(confirm);
                    }
                } else if (obj == confirm) {
                    if (c == BACK_CMD) {
                        display.setCurrent(bidForm);
                    } else if (c == SUBMIT_CMD) {
                        // display.setCurrent(submitMsg, notice);
			TimerService = new Timer();
			TimerClient timerClient = new TimerClient();
			TimerService.schedule(timerClient, 0, 1000);	
                        display.setCurrent(submitMsg);
                    }
                } else if (obj == notice) {
                    if (c == BACK_CMD) {
                        display.setCurrent(bidForm);
                    } else if (c == MENU_CMD) {
                        display.setCurrent(aucMenu);
                    }
                }
            }
        }
        private class TimerClient extends TimerTask {
            public final void run() {
	 	if (submitGauge.getValue() == submitGauge.getMaxValue()) {
			TimerService.cancel();
			submitGauge.setValue(0);
			display.setCurrent(notice);	
		} else {
			submitGauge.setValue(submitGauge.getValue()+10);
		}	
            }
	}

    }


    class SetDate extends Form implements CommandListener {
        DateField dateTimeItem = new DateField(null, DateField.DATE_TIME);

        SetDate() {
            super(null);
            append("Use this screen to set the date and time"
		   + " on your phone before submitting bids.\n");
            append(dateTimeItem);
            addCommand(BACK_CMD);
            setCommandListener(this);
        }

        void setDate() {
            dateTimeItem.setDate(new java.util.Date());
        }

        public void commandAction(Command c, Displayable s) {
            if (s instanceof Form) {
                Form obj = (Form) s;
                if (obj == this) {
                    if (c == BACK_CMD) {
                        display.setCurrent(setMenu);
                    }
                }
            }
        }
    }

    class SetTicker extends Form implements CommandListener {
        ChoiceGroup cg;
        SetTicker() {
            super("Ticker Display");
            cg = new ChoiceGroup(null, Choice.MULTIPLE);
            cg.append("My Bands", null);
            cg.append("Pop", null);
            cg.append("Rock", null);
            cg.append("Alternative", null);
            cg.append("Jazz", null);
            cg.append("Classical", null);
            append(cg);
            cg.setSelectedIndex(3, true);
            addCommand(BACK_CMD);
            addCommand(SAVE_CMD);
            setCommandListener(this);
        }
        boolean[] ret = new boolean[6];
        public void commandAction(Command c, Displayable s) {
            if (c == SAVE_CMD) {
                cg.getSelectedFlags(ret);
                String str = band.toTickerString(ret);
                if (str != null) {
                    ticker.setString(str);
                }
                display.setCurrent(savedMsg, setMenu);
            } else if (c == BACK_CMD) {
                display.setCurrent(setMenu);
            }
        }
    }

    class Update extends Form implements CommandListener {
        Timer timerService = new Timer();
        ChoiceGroup cg;
        Update() {
            super("Update");
            cg = new ChoiceGroup(null, Choice.EXCLUSIVE);
            cg.append("Continuous", null);
            cg.append("15 minutes", null);
            cg.append("30 minutes", null);
            cg.append("1 hour", null);
            cg.append("3 hours", null);
            append(cg);
            addCommand(BACK_CMD);
            addCommand(SAVE_CMD);
            setCommandListener(this);
        }
        public void commandAction(Command c, Displayable s) {
            if (c == SAVE_CMD) {
                if (updateAlert.hasDataToUpdate()) {
                    int idx = cg.getSelectedIndex();
                    TimerTask timerClient = new TimerTask() {
                        public final void run() {
                            updateAlert.show();
                        }
                    };
                    switch (idx) {
                    case 0:
                        timerService.schedule(timerClient, 3000);
                        break;
                    case 1:
                        timerService.schedule(timerClient, 3000);
                        break;
                    case 2:
                        timerService.schedule(timerClient, 3000);
                        break;
                    case 3:
                        timerService.schedule(timerClient, 3000);
                        break;
                    case 4:
                        timerService.schedule(timerClient, 3000);
                        break;
                    }
                }
                display.setCurrent(savedMsg, setMenu);
            } else if (c == BACK_CMD) {
                display.setCurrent(setMenu);
            }
        }
    }

    class UpdateAlert implements CommandListener {
        String band = "", bid = "";
        Form f = new Form("Alert");
        UpdateAlert() {
            f.append("dummy");
            f.addCommand(BACK_CMD);
            f.setCommandListener(this);
        }
        void set(String band, String bid) {
            this.band = band;
            this.bid = bid;
        }
        boolean hasDataToUpdate() {
            return ((band != null) && (band != "") &&
                    (bid != null) && (bid != ""));
        }
        void show() {
            // no-op if band & bid aren't set
	    if (hasDataToUpdate()) {
                f.delete(0);
                String s = new String(band + "\n" + 
                                  "ticket bids\n" +
                                  "have reached\n" +
                                  "$" + bid);
                f.append(s);
                display.setCurrent(f);
            }
        }
        public void commandAction(Command c, Displayable s) {
            if (c == BACK_CMD) {
                display.setCurrent(setMenu);
            }
        }
    }

    void updateBandList(String list) {
        if (list.length() == 0) {
            return;
        }

        Vector vec = new Vector();
        int fidx = 0;
        while (true) {
            int idx = list.indexOf(',', fidx);
            if (idx == -1) {
                vec.addElement(list.substring(fidx));
                break;
            }
            vec.addElement(list.substring(fidx, idx));
            fidx = idx + 1;
        }

        for (int i = 0; i < vec.size(); i++) {
            String str = (String)vec.elementAt(i);
            int j = 0;
            int len = str.length();
            for (; j < len; j++) {
                if (str.charAt(j) != ' ') {
                    break;
                }
            }
            if (j == len) {
                continue;
            }
            if (j == 0) {
                band.add(str);
            } else {
                band.add(str.substring(j));
            }
        }
        reconstructList(bandList, band.getList());
        rmBand.reset();
    }

    class RmBand extends Form implements CommandListener {
        ChoiceGroup cg;
        RmBand() {
            super("Remove Bands");
            cg = new ChoiceGroup(null, Choice.MULTIPLE);
            String[] list = band.getList();
            for (int i = 0; i < list.length; i++) {
                cg.append(list[i], null);
            }
            append(cg);
            addCommand(BACK_CMD);
            addCommand(SAVE_CMD);
            setCommandListener(this);
        }
        public void commandAction(Command c, Displayable s) {
            if (c == SAVE_CMD) {
                boolean[] ret = new boolean[cg.size()];
                cg.getSelectedFlags(ret);
                removeBandList(ret);
                display.setCurrent(savedMsg, setMenu);
            } else if (c == BACK_CMD) {
                display.setCurrent(setMenu);
            }
        }
        void reset() {
            reconstructList(cg, band.getList());
        }
        void removeBandList(boolean[] t) {
            int i = t.length;
            while (--i >= 0) {
                if (t[i]) {
                    band.remove(i);
                }
            }
            reconstructList(bandList, band.getList());
            reconstructList(cg, band.getList());
        }
    }

    void reconstructForm(Form form, String title, String items) {
        form.setTitle(title);
        int num = form.size();
        while (--num >= 0) {
            form.delete(num);
        }
        form.append(items);
    }

    void reconstructList(Choice list, String[] items) {
        int num = list.size();
        while (--num >= 0) {
            list.delete(num);
        }
        for (int i = 0; i < items.length; i++) {
            list.append(items[i], null);
        }
        // list.setSelectedIndex(0, true);
    }

    static byte dukeData[] = {
        (byte)0x89, (byte)0x50, (byte)0x4e, (byte)0x47, 
        (byte)0x0d, (byte)0x0a, (byte)0x1a, (byte)0x0a, 
        (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x0d, 
        (byte)0x49, (byte)0x48, (byte)0x44, (byte)0x52, 
        (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x4b, 
        (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x2f, 
        (byte)0x08, (byte)0x02, (byte)0x00, (byte)0x00, 
        (byte)0x00, (byte)0x24, (byte)0x49, (byte)0xa0, 
        (byte)0xf1, (byte)0x00, (byte)0x00, (byte)0x0a, 
        (byte)0xfc, (byte)0x49, (byte)0x44, (byte)0x41, 
        (byte)0x54, (byte)0x78, (byte)0x9c, (byte)0xbd, 
        (byte)0x5a, (byte)0x3f, (byte)0x88, (byte)0xe3, 
        (byte)0x46, (byte)0x17, (byte)0x7f, (byte)0x9b, 
        (byte)0xef, (byte)0x02, (byte)0x23, (byte)0xd8, 
        (byte)0x80, (byte)0xa6, (byte)0x38, (byte)0x90, 
        (byte)0x8a, (byte)0x04, (byte)0x54, (byte)0x24, 
        (byte)0x20, (byte)0x43, (byte)0x02, (byte)0x52, 
        (byte)0xb7, (byte)0x2a, (byte)0x9d, (byte)0x4e, 
        (byte)0xdb, (byte)0xd9, (byte)0x45, (byte)0x60, 
        (byte)0x5d, (byte)0xfa, (byte)0xeb, (byte)0x7c, 
        (byte)0x45, (byte)0x60, (byte)0x5d, (byte)0xba, 
        (byte)0xf8, (byte)0x0a, (byte)0x97, (byte)0x36, 
        (byte)0xa4, (byte)0xb0, (byte)0xbb, (byte)0x55, 
        (byte)0x13, (byte)0xf0, (byte)0x76, (byte)0xda, 
        (byte)0xce, (byte)0xee, (byte)0x4e, (byte)0x29, 
        (byte)0x02, (byte)0x12, (byte)0xa4, (byte)0x90, 
        (byte)0x8a, (byte)0x03, (byte)0xab, (byte)0x38, 
        (byte)0xb8, (byte)0x29, (byte)0xae, (byte)0x18, 
        (byte)0xc1, (byte)0x2d, (byte)0x68, (byte)0x8a, 
        (byte)0x80, (byte)0x5e, (byte)0xb1, (byte)0x61, 
        (byte)0xbf, (byte)0xe2, (byte)0xdd, (byte)0x2a, 
        (byte)0x3a, (byte)0xdb, (byte)0xeb, (byte)0xdb, 
        (byte)0xf5, (byte)0xde, (byte)0xdd, (byte)0x2b, 
        (byte)0x96, (byte)0xb5, (byte)0xac, (byte)0xf9, 
        (byte)0xf3, (byte)0x9b, (byte)0x79, (byte)0xf3, 
        (byte)0x7b, (byte)0xbf, (byte)0xf7, (byte)0xc6, 
        (byte)0x47, (byte)0xe5, (byte)0x6d, (byte)0xc9, 
        (byte)0x40, (byte)0x07, (byte)0x40, (byte)0xf8, 
        (byte)0xcc, (byte)0x26, (byte)0x0b, (byte)0x25, 
        (byte)0xc4, (byte)0xba, (byte)0x65, (byte)0xbb, 
        (byte)0xba, (byte)0xce, (byte)0x3e, (byte)0xf7, 
        (byte)0x58, (byte)0x77, (byte)0xc6, (byte)0x10, 
        (byte)0xd4, (byte)0x33, (byte)0x1d, (byte)0x74, 
        (byte)0xfa, (byte)0xf0, (byte)0xb9, (byte)0x47, 
        (byte)0xcb, (byte)0xe2, (byte)0x78, (byte)0xb5, 
        (byte)0x5a, (byte)0xcd, (byte)0x66, (byte)0x1e, 
        (byte)0xfb, (byte)0xfc, (byte)0x63, (byte)0xd5, 
        (byte)0xc6, (byte)0x40, (byte)0x7f, (byte)0x86, 
        (byte)0x80, (byte)0x5f, (byte)0x60, (byte)0xc8, 
        (byte)0xa2, (byte)0x28, (byte)0xe6, (byte)0xf3, 
        (byte)0x39, (byte)0x00, (byte)0x30, (byte)0xf6, 
        (byte)0xe5, (byte)0xe0, (byte)0x01, (byte)0x00, 
        (byte)0x02, (byte)0x7e, (byte)0xf5, (byte)0x65, 
        (byte)0x46, (byte)0x8a, (byte)0xe3, (byte)0x38, 
        (byte)0x8a, (byte)0x22, (byte)0xc6, (byte)0x18, 
        (byte)0xe2, (byte)0x67, (byte)0x3f, (byte)0x0e, 
        (byte)0x1b, (byte)0xf6, (byte)0x25, (byte)0x10, 
        (byte)0x16, (byte)0x45, (byte)0x31, (byte)0x99, 
        (byte)0x4c, (byte)0x00, (byte)0x00, (byte)0x11, 
        (byte)0x95, (byte)0x52, (byte)0xfb, (byte)0x5f, 
        (byte)0xae, (byte)0x5f, (byte)0x40, (byte)0xc4, 
        (byte)0x3c, (byte)0xcf, (byte)0x3f, (byte)0xfa, 
        (byte)0xfe, (byte)0x47, (byte)0xed, (byte)0xd3, 
        (byte)0x23, (byte)0x54, (byte)0x4a, (byte)0x6d, 
        (byte)0x4c, (byte)0x2b, (byte)0x0c, (byte)0xc3, 
        (byte)0x24, (byte)0x49, (byte)0x00, (byte)0x40, 
        (byte)0x4a, (byte)0x29, (byte)0xa5, (byte)0xdc, 
        (byte)0xdf, (byte)0x3c, (byte)0x4d, (byte)0x53, 
        (byte)0x44, (byte)0x2c, (byte)0x8a, (byte)0xe2, 
        (byte)0xea, (byte)0xea, (byte)0x4a, (byte)0x08, 
        (byte)0xa1, (byte)0xeb, (byte)0xfa, (byte)0x13, 
        (byte)0xe7, (byte)0xf3, (byte)0xe9, (byte)0x11, 
        (byte)0xce, (byte)0xe7, (byte)0xf3, (byte)0x28, 
        (byte)0x8a, (byte)0xea, (byte)0x8f, (byte)0x42, 
        (byte)0x88, (byte)0xe9, (byte)0x74, (byte)0x4a, 
        (byte)0xff, (byte)0x4b, (byte)0x29, (byte)0x85, 
        (byte)0x10, (byte)0x7b, (byte)0xda, (byte)0xe6, 
        (byte)0x79, (byte)0x9e, (byte)0x24, (byte)0x89, 
        (byte)0x94, (byte)0x72, (byte)0xb1, (byte)0x58, 
        (byte)0x84, (byte)0x61, (byte)0xc8, (byte)0x39, 
        (byte)0x7f, (byte)0xfa, (byte)0x7c, (byte)0x3e, 
        (byte)0x3d, (byte)0xc2, (byte)0xf5, (byte)0x7a, 
        (byte)0xdd, (byte)0x5c, (byte)0xf8, (byte)0xcb, 
        (byte)0xcb, (byte)0xcb, (byte)0x1a, (byte)0x95, 
        (byte)0x52, (byte)0x2a, (byte)0xcf, (byte)0xf3, 
        (byte)0x3d, (byte)0x6d, (byte)0xb3, (byte)0x2c, 
        (byte)0x13, (byte)0x42, (byte)0x70, (byte)0xce, 
        (byte)0x4d, (byte)0xd3, (byte)0xec, (byte)0xf7, 
        (byte)0xfb, (byte)0xb6, (byte)0x6d, (byte)0x7f, 
        (byte)0x82, (byte)0x09, (byte)0x55, (byte)0xb7, 
        (byte)0xd5, (byte)0xed, (byte)0xd3, (byte)0xac, 
        (byte)0xaa, (byte)0xaa, (byte)0x30, (byte)0x0c, 
        (byte)0x2f, (byte)0x2e, (byte)0x2e, (byte)0xd6, 
        (byte)0xeb, (byte)0xf5, (byte)0x9b, (byte)0x37, 
        (byte)0x6f, (byte)0xfa, (byte)0xfd, (byte)0x7e, 
        (byte)0x55, (byte)0xbd, (byte)0xef, (byte)0xf3, 
        (byte)0xcd, (byte)0x9b, (byte)0x37, (byte)0x1b, 
        (byte)0x6e, (byte)0xe6, (byte)0xfb, (byte)0x7e, 
        (byte)0x59, (byte)0x96, (byte)0x7b, (byte)0xba, 
        (byte)0x4a, (byte)0xd3, (byte)0xf4, (byte)0x89, 
        (byte)0xf3, (byte)0xf9, (byte)0xa0, (byte)0xc3, 
        (byte)0xdb, (byte)0xea, (byte)0xd9, (byte)0xd3, 
        (byte)0xd7, (byte)0x68, (byte)0xb1, (byte)0x58, 
        (byte)0x8c, (byte)0x46, (byte)0x23, (byte)0xcb, 
        (byte)0xb2, (byte)0xf2, (byte)0x3c, (byte)0x97, 
        (byte)0x52, (byte)0x5a, (byte)0x96, (byte)0xc5, 
        (byte)0x18, (byte)0x13, (byte)0x42, (byte)0x58, 
        (byte)0x96, (byte)0x35, (byte)0x9f, (byte)0xcf, 
        (byte)0x37, (byte)0xce, (byte)0x64, (byte)0x9a, 
        (byte)0xa6, (byte)0x69, (byte)0x9a, (byte)0xb6, 
        (byte)0xdb, (byte)0xed, (byte)0x9d, (byte)0x5d, 
        (byte)0x31, (byte)0xc6, (byte)0x4c, (byte)0xd3, 
        (byte)0x14, (byte)0x42, (byte)0xd0, (byte)0x6e, 
        (byte)0x97, (byte)0x65, (byte)0xc9, (byte)0x18, 
        (byte)0xeb, (byte)0x76, (byte)0xbb, (byte)0x4f, 
        (byte)0x39, (byte)0x8d, (byte)0x4f, (byte)0x45, 
        (byte)0xa8, (byte)0x94, (byte)0x0a, (byte)0x82, 
        (byte)0x80, (byte)0x73, (byte)0x7e, (byte)0x7a, 
        (byte)0x7a, (byte)0x0a, (byte)0x00, (byte)0x52, 
        (byte)0x4a, (byte)0xcf, (byte)0xf3, (byte)0x08, 
        (byte)0xaa, (byte)0xa6, (byte)0x69, (byte)0x41, 
        (byte)0x10, (byte)0x6c, (byte)0xbc, (byte)0x5f, 
        (byte)0x14, (byte)0x45, (byte)0x92, (byte)0x24, 
        (byte)0xf7, (byte)0x21, (byte)0x44, (byte)0xc4, 
        (byte)0xc5, (byte)0x62, (byte)0x91, (byte)0xe7, 
        (byte)0x39, (byte)0x63, (byte)0x4c, (byte)0xd7, 
        (byte)0x75, (byte)0xce, (byte)0x79, (byte)0x96, 
        (byte)0x65, (byte)0x45, (byte)0x51, (byte)0x9c, 
        (byte)0x9c, (byte)0x9c, (byte)0xb8, (byte)0xae, 
        (byte)0x7b, (byte)0x18, (byte)0xce, (byte)0xa7, 
        (byte)0x22, (byte)0x24, (byte)0x42, (byte)0x77, 
        (byte)0x1c, (byte)0xc7, (byte)0xf7, (byte)0x7d, 
        (byte)0x44, (byte)0x94, (byte)0x52, (byte)0xda, 
        (byte)0xb6, (byte)0x4d, (byte)0x67, (byte)0x69, 
        (byte)0xb1, (byte)0x58, (byte)0xec, (byte)0xe4, 
        (byte)0xfa, (byte)0xe5, (byte)0x72, (byte)0x79, 
        (byte)0x76, (byte)0x76, (byte)0x66, (byte)0x59, 
        (byte)0xd6, (byte)0xf6, (byte)0x57, (byte)0x41, 
        (byte)0x10, (byte)0x44, (byte)0x51, (byte)0xe4, 
        (byte)0x79, (byte)0x9e, (byte)0x61, (byte)0x18, 
        (byte)0x96, (byte)0x65, (byte)0x69, (byte)0x9a, 
        (byte)0x66, (byte)0x59, (byte)0x96, (byte)0x10, 
        (byte)0x22, (byte)0xcf, (byte)0x73, (byte)0xce, 
        (byte)0xb9, (byte)0xe3, (byte)0x38, (byte)0x07, 
        (byte)0xcc, (byte)0xf0, (byte)0x49, (byte)0x08, 
        (byte)0xb3, (byte)0x2c, (byte)0x5b, (byte)0xaf, 
        (byte)0xd7, (byte)0xfd, (byte)0x7e, (byte)0x9f, 
        (byte)0xb0, (byte)0x49, (byte)0x29, (byte)0x19, 
        (byte)0x63, (byte)0x59, (byte)0x96, (byte)0xd9, 
        (byte)0xb6, (byte)0xcd, (byte)0x39, (byte)0x27, 
        (byte)0x11, (byte)0xb3, (byte)0x6d, (byte)0x49, 
        (byte)0x92, (byte)0x24, (byte)0x49, (byte)0xb2, 
        (byte)0x8d, (byte)0x30, (byte)0xcf, (byte)0x73, 
        (byte)0x21, (byte)0x84, (byte)0xef, (byte)0xfb, 
        (byte)0xa6, (byte)0x69, (byte)0x02, (byte)0x40, 
        (byte)0x51, (byte)0x14, (byte)0x00, (byte)0x40, 
        (byte)0x8e, (byte)0x0a, (byte)0x4f, (byte)0x10, 
        (byte)0x43, (byte)0x87, (byte)0x73, (byte)0xa9, 
        (byte)0x10, (byte)0x22, (byte)0x8e, (byte)0x63, 
        (byte)0x44, (byte)0x64, (byte)0x8c, (byte)0x19, 
        (byte)0x86, (byte)0x21, (byte)0xa5, (byte)0x4c, 
        (byte)0x92, (byte)0xc4, (byte)0xf3, (byte)0x3c, 
        (byte)0xc6, (byte)0x18, (byte)0x63, (byte)0x2c, 
        (byte)0x4d, (byte)0xd3, (byte)0x3d, (byte)0x81, 
        (byte)0x21, (byte)0x08, (byte)0x02, (byte)0x02, 
        (byte)0x50, (byte)0x1b, (byte)0x22, (byte)0xc6, 
        (byte)0x71, (byte)0x4c, (byte)0xb0, (byte)0x69, 
        (byte)0xb1, (byte)0xca, (byte)0xb2, (byte)0x2c, 
        (byte)0xcb, (byte)0xb2, (byte)0x7e, (byte)0x81, 
        (byte)0x60, (byte)0xef, (byte)0x31, (byte)0x54, 
        (byte)0x8a, (byte)0xa8, (byte)0x78, (byte)0xe3, 
        (byte)0xf9, (byte)0xe1, (byte)0x08, (byte)0x69, 
        (byte)0x8a, (byte)0x24, (byte)0xc4, (byte)0xf2, 
        (byte)0x3c, (byte)0xa7, (byte)0xb3, (byte)0x67, 
        (byte)0xdb, (byte)0xb6, (byte)0xef, (byte)0xfb, 
        (byte)0xc4, (byte)0x31, (byte)0x7b, (byte)0xda, 
        (byte)0x46, (byte)0x51, (byte)0xb4, (byte)0x5c, 
        (byte)0x2e, (byte)0x9b, (byte)0x4f, (byte)0x18, 
        (byte)0x63, (byte)0x9e, (byte)0xe7, (byte)0xed, 
        (byte)0x6f, (byte)0xb2, (byte)0xe1, (byte)0xf3, 
        (byte)0x88, (byte)0xf8, (byte)0x81, (byte)0x06, 
        (byte)0x64, (byte)0x0c, (byte)0x00, (byte)0x84, 
        (byte)0x10, (byte)0xf4, (byte)0xb0, (byte)0xd6, 
        (byte)0x4f, (byte)0x07, (byte)0x7a, (byte)0xa9, 
        (byte)0x52, (byte)0x8a, (byte)0x56, (byte)0x8b, 
        (byte)0xf6, (byte)0xd0, (byte)0xb6, (byte)0x6d, 
        (byte)0x44, (byte)0xcc, (byte)0xb2, (byte)0x8c, 
        (byte)0x7a, (byte)0x2f, (byte)0x8a, (byte)0xa2, 
        (byte)0x19, (byte)0xf4, (byte)0x77, (byte)0xda, 
        (byte)0x74, (byte)0x3a, (byte)0x3d, (byte)0x3d, 
        (byte)0x3d, (byte)0x35, (byte)0x0c, (byte)0xa3, 
        (byte)0x31, (byte)0xc3, (byte)0x1d, (byte)0x7e, 
        (byte)0x48, (byte)0xec, (byte)0xca, (byte)0x39, 
        (byte)0x67, (byte)0x8c, (byte)0xc5, (byte)0x71, 
        (byte)0x4c, (byte)0xa7, (byte)0xb1, (byte)0xf6, 
        (byte)0x5b, (byte)0xc2, (byte)0x40, (byte)0x1f, 
        (byte)0x69, (byte)0x68, (byte)0xae, (byte)0x69, 
        (byte)0x52, (byte)0x4a, (byte)0xa5, (byte)0x54, 
        (byte)0x59, (byte)0x96, (byte)0x9a, (byte)0xa6, 
        (byte)0x01, (byte)0xc0, (byte)0x7f, (byte)0x46, 
        (byte)0xff, (byte)0x1b, (byte)0x3d, (byte)0x7b, 
        (byte)0x24, (byte)0x4e, (byte)0xa5, (byte)0xd4, 
        (byte)0x6a, (byte)0xb5, (byte)0x6a, (byte)0xba, 
        (byte)0xd0, (byte)0xdf, (byte)0x7f, (byte)0xff, 
        (byte)0xfd, (byte)0xea, (byte)0xd5, (byte)0x2b, 
        (byte)0x00, (byte)0xf8, (byte)0xe5, (byte)0x97, 
        (byte)0x5f, (byte)0x6e, (byte)0x6e, (byte)0x6e, 
        (byte)0x7e, (byte)0xfb, (byte)0xed, (byte)0xb7, 
        (byte)0x3f, (byte)0xfe, (byte)0xf8, (byte)0x63, 
        (byte)0x7f, (byte)0x27, (byte)0xd7, (byte)0xd7, 
        (byte)0xd7, (byte)0x9c, (byte)0xf3, (byte)0x9f, 
        (byte)0x7e, (byte)0xfa, (byte)0xa9, (byte)0x06, 
        (byte)0xc6, (byte)0x39, (byte)0xff, (byte)0xe1, 
        (byte)0x87, (byte)0x1f, (byte)0x6e, (byte)0x6e, 
        (byte)0x6e, (byte)0xae, (byte)0xaf, (byte)0xaf, 
        (byte)0x69, (byte)0xde, (byte)0xcf, (byte)0x9f, 
        (byte)0x3f, (byte)0xff, (byte)0xf9, (byte)0xe7, 
        (byte)0x9f, (byte)0x1d, (byte)0xc7, (byte)0xf9, 
        (byte)0xf6, (byte)0xdb, (byte)0x6f, (byte)0x4d, 
        (byte)0xd3, (byte)0xfc, (byte)0xfe, (byte)0xfb, 
        (byte)0xef, (byte)0xaf, (byte)0xaf, (byte)0xaf, 
        (byte)0x5f, (byte)0xbd, (byte)0x7a, (byte)0xf5, 
        (byte)0xcd, (byte)0x37, (byte)0xdf, (byte)0x1c, 
        (byte)0x1f, (byte)0x1f, (byte)0xd7, (byte)0x93, 
        (byte)0x39, (byte)0x3e, (byte)0x3e, (byte)0x46, 
        (byte)0xc4, (byte)0xb7, (byte)0x6f, (byte)0xdf, 
        (byte)0xbe, (byte)0x7b, (byte)0xf7, (byte)0xee, 
        (byte)0xe8, (byte)0xeb, (byte)0xaf, (byte)0xdf, 
        (byte)0xbd, (byte)0x7b, (byte)0x77, (byte)0x74, 
        (byte)0x74, (byte)0xf4, (byte)0xfc, (byte)0xf9, 
        (byte)0x73, (byte)0x3a, (byte)0x2f, (byte)0x8f, 
        (byte)0xde, (byte)0xc3, (byte)0xa2, (byte)0x28, 
        (byte)0x96, (byte)0xcb, (byte)0x25, (byte)0xc9, 
        (byte)0x0e, (byte)0x02, (byte)0x49, (byte)0xde, 
        (byte)0x22, (byte)0xa5, (byte)0xf4, (byte)0x7d, 
        (byte)0xdf, (byte)0x30, (byte)0x0c, (byte)0x21, 
        (byte)0xc4, (byte)0x6a, (byte)0xb5, (byte)0xba, 
        (byte)0xaf, (byte)0x39, (byte)0x03, (byte)0x60, 
        (byte)0xc0, (byte)0x4c, (byte)0xd0, (byte)0x75, 
        (byte)0x80, (byte)0x70, (byte)0x34, (byte)0x4b, 
        (byte)0xa3, (byte)0xb8, (byte)0xdb, (byte)0xef, 
        (byte)0x75, (byte)0x3a, (byte)0x1d, (byte)0xc2, 
        (byte)0xa9, (byte)0xeb, (byte)0x7a, (byte)0xab, 
        (byte)0xd5, (byte)0x42, (byte)0x44, (byte)0xce, 
        (byte)0xb9, (byte)0x65, (byte)0x59, (byte)0xcd, 
        (byte)0x1d, (byte)0x26, (byte)0xa3, (byte)0x0d, 
        (byte)0x8c, (byte)0xe3, (byte)0xb8, (byte)0xd3, 
        (byte)0xe9, (byte)0xd0, (byte)0x13, (byte)0x0a, 
        (byte)0x21, (byte)0x24, (byte)0x86, (byte)0x35, 
        (byte)0x4d, (byte)0xab, (byte)0xaa, (byte)0x8a, 
        (byte)0xfe, (byte)0xea, (byte)0x8c, (byte)0x99, 
        (byte)0x96, (byte)0xc5, (byte)0xf4, (byte)0x47, 
        (byte)0x22, (byte)0x24, (byte)0x78, (byte)0xed, 
        (byte)0x76, (byte)0xdb, (byte)0xb2, (byte)0x2c, 
        (byte)0x44, (byte)0x9c, (byte)0xcf, (byte)0xe7, 
        (byte)0x42, (byte)0x88, (byte)0xfa, (byte)0xfc, 
        (byte)0xb8, (byte)0xae, (byte)0x0b, (byte)0x00, 
        (byte)0x49, (byte)0x92, (byte)0xec, (byte)0x94, 
        (byte)0x66, (byte)0x0c, (byte)0xc0, (byte)0xb1, 
        (byte)0x9d, (byte)0x9e, (byte)0xe9, (byte)0xd9, 
        (byte)0x6b, (byte)0x06, (byte)0xc5, (byte)0xfb, 
        (byte)0xf3, (byte)0x83, (byte)0x11, (byte)0x5e, 
        (byte)0x45, (byte)0x93, (byte)0xe5, (byte)0xd9, 
        (byte)0x32, (byte)0x08, (byte)0x02, (byte)0x02, 
        (byte)0x69, (byte)0x18, (byte)0x86, (byte)0xef, 
        (byte)0xfb, (byte)0xcd, (byte)0x86, (byte)0x4a, 
        (byte)0xa9, (byte)0x3a, (byte)0x12, (byte)0xd2, 
        (byte)0x52, (byte)0xd6, (byte)0x61, (byte)0xa3, 
        (byte)0xf6, (byte)0xcf, (byte)0x52, (byte)0xca, 
        (byte)0xaa, (byte)0xaa, (byte)0x00, (byte)0x80, 
        (byte)0x3c, (byte)0x53, (byte)0xe3, (byte)0x5c, 
        (byte)0x21, (byte)0xca, (byte)0x3c, (byte)0x75, 
        (byte)0x6d, (byte)0xf7, (byte)0x71, (byte)0x4c, 
        (byte)0x93, (byte)0xa6, (byte)0xa9, (byte)0xe7, 
        (byte)0x79, (byte)0xc4, (byte)0x78, (byte)0x8c, 
        (byte)0xb1, (byte)0x76, (byte)0xbb, (byte)0x9d, 
        (byte)0xe7, (byte)0x79, (byte)0x1c, (byte)0xc7, 
        (byte)0x79, (byte)0x9e, (byte)0xf7, (byte)0x7a, 
        (byte)0x3d, (byte)0x1a, (byte)0x78, (byte)0xb9, 
        (byte)0x5c, (byte)0x6e, (byte)0x27, (byte)0x81, 
        (byte)0x0c, (byte)0xd8, (byte)0xa0, (byte)0x7d, 
        (byte)0x16, (byte)0x2d, (byte)0xa3, (byte)0xc1, 
        (byte)0xcb, (byte)0x99, (byte)0xfb, (byte)0xc2, 
        (byte)0x6f, (byte)0x3e, (byte)0x3f, (byte)0x03, 
        (byte)0x8f, (byte)0x5f, (byte)0x8a, (byte)0xab, 
        (byte)0xab, (byte)0xab, (byte)0x3d, (byte)0xe3, 
        (byte)0x52, (byte)0x87, (byte)0x4a, (byte)0x29, 
        (byte)0x3a, (byte)0x8a, (byte)0xcd, (byte)0x48, 
        (byte)0xa3, (byte)0x94, (byte)0x92, (byte)0x52, 
        (byte)0x22, (byte)0x00, (byte)0xe7, (byte)0x9c, 
        (byte)0x73, (byte)0xce, (byte)0x00, (byte)0x68, 
        (byte)0x03, (byte)0x0d, (byte)0xc3, (byte)0xe0, 
        (byte)0x8c, (byte)0xc3, (byte)0x01, (byte)0x4c, 
        (byte)0xd3, (byte)0x54, (byte)0xc3, (byte)0x8e, 
        (byte)0xe3, (byte)0x5c, (byte)0x5c, (byte)0x5c, 
        (byte)0xe4, (byte)0x79, (byte)0xee, (byte)0xba, 
        (byte)0x2e, (byte)0x79, (byte)0x94, (byte)0x10, 
        (byte)0x22, (byte)0xcb, (byte)0xb2, (byte)0x2d, 
        (byte)0x78, (byte)0x30, (byte)0x60, (byte)0xce, 
        (byte)0xa4, (byte)0x33, (byte)0x04, (byte)0x4b, 
        (byte)0x07, (byte)0x85, (byte)0x52, (byte)0x16, 
        (byte)0x1b, (byte)0x2f, (byte)0x74, (byte)0xc0, 
        (byte)0x9d, (byte)0x07, (byte)0xe1, (byte)0xd9, 
        (byte)0xd9, (byte)0xd9, (byte)0xf6, (byte)0x70, 
        (byte)0x4a, (byte)0x29, (byte)0xda, (byte)0x28, 
        (byte)0x92, (byte)0x16, (byte)0xad, (byte)0x56, 
        (byte)0xab, (byte)0x76, (byte)0x5d, (byte)0x62, 
        (byte)0xcb, (byte)0xb2, (byte)0x2c, (byte)0x09, 
        (byte)0x33, (byte)0x22, (byte)0x2a, (byte)0x44, 
        (byte)0x40, (byte)0x04, (byte)0x29, (byte)0x95, 
        (byte)0x52, (byte)0x96, (byte)0x65, (byte)0x59, 
        (byte)0x96, (byte)0x85, (byte)0x80, (byte)0x1f, 
        (byte)0x47, (byte)0x48, (byte)0x6c, (byte)0xf9, 
        (byte)0x7e, (byte)0xae, (byte)0x77, (byte)0x82, 
        (byte)0xb3, (byte)0xfe, (byte)0x96, (byte)0x3a, 
        (byte)0x6a, (byte)0x4e, (byte)0x68, (byte)0x3b, 
        (byte)0x03, (byte)0xb4, (byte)0xc0, (byte)0xf0, 
        (byte)0xd1, (byte)0x15, (byte)0x57, (byte)0xb1, 
        (byte)0xc6, (byte)0xb1, (byte)0x8c, (byte)0xd6, 
        (byte)0x32, (byte)0xd8, (byte)0x5c, (byte)0x02, 
        (byte)0x00, (byte)0x90, (byte)0x22, (byte)0xcf, 
        (byte)0xb2, (byte)0x6c, (byte)0x43, (byte)0xb5, 
        (byte)0xd0, (byte)0xd0, (byte)0x4a, (byte)0xa9, 
        (byte)0xaa, (byte)0xaa, (byte)0x38, (byte)0xe7, 
        (byte)0xf5, (byte)0xe2, (byte)0xd2, (byte)0xc9, 
        (byte)0x27, (byte)0x16, (byte)0x20, (byte)0x19, 
        (byte)0x4c, (byte)0x73, (byte)0x33, (byte)0xe8, 
        (byte)0x30, (byte)0x33, (byte)0x96, (byte)0x0b, 
        (byte)0x51, (byte)0x96, (byte)0x25, (byte)0xad, 
        (byte)0xc5, (byte)0x83, (byte)0x10, (byte)0xc2, 
        (byte)0x9d, (byte)0xc7, (byte)0x7b, (byte)0x9e, 
        (byte)0x57, (byte)0x47, (byte)0x79, (byte)0x62, 
        (byte)0xf0, (byte)0x0d, (byte)0x8a, (byte)0x0f, 
        (byte)0x82, (byte)0x60, (byte)0xc3, (byte)0x45, 
        (byte)0x19, (byte)0x80, (byte)0x0d, (byte)0x26, 
        (byte)0x00, (byte)0x88, (byte)0x28, (byte)0x83, 
        (byte)0xe8, (byte)0xde, (byte)0xd4, (byte)0x29, 
        (byte)0x2f, (byte)0xa5, (byte)0xef, (byte)0xfb, 
        (byte)0xc3, (byte)0xe1, (byte)0xf0, (byte)0xfc, 
        (byte)0xfc, (byte)0xfc, (byte)0xdf, (byte)0xb6, 
        (byte)0x8c, (byte)0xd1, (byte)0x1e, (byte)0xd2, 
        (byte)0x39, (byte)0xc4, (byte)0x3b, (byte)0xab, 
        (byte)0x00, (byte)0xa0, (byte)0xaa, (byte)0xb8, 
        (byte)0xa6, (byte)0xe9, (byte)0x5b, (byte)0x54, 
        (byte)0x04, (byte)0x00, (byte)0x4c, (byte)0xd7, 
        (byte)0x6b, (byte)0xd8, (byte)0x00, (byte)0x70, 
        (byte)0x54, (byte)0xdd, (byte)0x56, (byte)0xfb, 
        (byte)0x2b, (byte)0x51, (byte)0xd4, (byte)0x69, 
        (byte)0xbd, (byte)0x4e, (byte)0x75, (byte)0x24, 
        (byte)0x25, (byte)0xd6, (byte)0xd2, (byte)0x75, 
        (byte)0xbd, (byte)0xee, (byte)0xeb, (byte)0xf2, 
        (byte)0xf2, (byte)0xf2, (byte)0xfc, (byte)0xfc, 
        (byte)0xbc, (byte)0x16, (byte)0x2b, (byte)0x24, 
        (byte)0x9d, (byte)0xab, (byte)0xaa, (byte)0x6a, 
        (byte)0x17, (byte)0x66, (byte)0x1f, (byte)0xf6, 
        (byte)0x45, (byte)0xf3, (byte)0x00, (byte)0xe2, 
        (byte)0xd6, (byte)0xa4, (byte)0xb7, (byte)0x0c, 
        (byte)0xc3, (byte)0x24, (byte)0x49, (byte)0x96, 
        (byte)0xcb, (byte)0xe5, (byte)0x06, (byte)0xd3, 
        (byte)0x20, (byte)0x00, (byte)0x2a, (byte)0x05, 
        (byte)0x88, (byte)0x65, (byte)0x55, (byte)0x69, 
        (byte)0x9a, (byte)0x46, (byte)0xf3, (byte)0x78, 
        (byte)0xa0, (byte)0x0a, (byte)0xdf, (byte)0xe1, 
        (byte)0xa5, (byte)0x34, (byte)0xfb, (byte)0x66, 
        (byte)0xfb, (byte)0x9a, (byte)0xaf, (byte)0xea, 
        (byte)0x3a, (byte)0xd2, (byte)0x36, (byte)0x89, 
        (byte)0x03, (byte)0xc0, (byte)0x6a, (byte)0xb5, 
        (byte)0x22, (byte)0x81, (byte)0xda, (byte)0x6e, 
        (byte)0xb7, (byte)0x1d, (byte)0xc7, (byte)0xb1, 
        (byte)0x6d, (byte)0x9b, (byte)0x22, (byte)0x75, 
        (byte)0x59, (byte)0x96, (byte)0xe3, (byte)0xfe, 
        (byte)0x10, (byte)0x36, (byte)0x8f, (byte)0x5e, 
        (byte)0xa3, (byte)0x21, (byte)0x4b, (byte)0x79, 
        (byte)0xcf, (byte)0x3b, (byte)0xeb, (byte)0x74, 
        (byte)0x4e, (byte)0x1c, (byte)0xe7, (byte)0xc5, 
        (byte)0x8b, (byte)0x17, (byte)0xf3, (byte)0xf9, 
        (byte)0x5c, (byte)0x4a, (byte)0xd9, (byte)0xcc, 
        (byte)0x98, (byte)0x08, (byte)0x12, (byte)0x30, 
        (byte)0x66, (byte)0xed, (byte)0x1a, (byte)0xf7, 
        (byte)0xa3, (byte)0xf6, (byte)0x01, (byte)0x42, 
        (byte)0xca, (byte)0xca, (byte)0xb6, (byte)0x35, 
        (byte)0x71, (byte)0xed, (byte)0x8d, (byte)0x35, 
        (byte)0xa7, (byte)0x6d, (byte)0x3c, (byte)0x57, 
        (byte)0x4a, (byte)0x4d, (byte)0xa7, (byte)0x53, 
        (byte)0x44, (byte)0x9c, (byte)0xcd, (byte)0x66, 
        (byte)0xa4, (byte)0xda, (byte)0x3e, (byte)0xe8, 
        (byte)0x76, (byte)0xac, (byte)0x82, (byte)0xff, 
        (byte)0x4e, (byte)0xfa, (byte)0xe0, (byte)0x01, 
        (byte)0x60, (byte)0xb3, (byte)0x30, (byte)0x7b, 
        (byte)0x05, (byte)0xb1, (byte)0x04, (byte)0x30, 
        (byte)0xfb, (byte)0x5e, (byte)0xa7, (byte)0xd7, 
        (byte)0x51, (byte)0x4a, (byte)0xb5, (byte)0xdb, 
        (byte)0xed, (byte)0xc9, (byte)0x64, (byte)0x42, 
        (byte)0x09, (byte)0xd7, (byte)0x68, (byte)0x34, 
        (byte)0xea, (byte)0x74, (byte)0x3a, (byte)0x75, 
        (byte)0x92, (byte)0xd5, (byte)0x1c, (byte)0xbd, 
        (byte)0xa9, (byte)0x7d, (byte)0x48, (byte)0x9e, 
        (byte)0xc1, (byte)0x3d, (byte)0x7a, (byte)0x68, 
        (byte)0x07, (byte)0xc2, (byte)0x9d, (byte)0x65, 
        (byte)0x22, (byte)0x54, (byte)0x4a, (byte)0x22, 
        (byte)0x6a, (byte)0x14, (byte)0x6e, (byte)0x00, 
        (byte)0x34, (byte)0x4d, (byte)0xab, (byte)0x3d, 
        (byte)0xb6, (byte)0x1e, (byte)0x78, (byte)0x32, 
        (byte)0x99, (byte)0xe8, (byte)0xba, (byte)0x7e, 
        (byte)0x72, (byte)0x72, (byte)0xd2, (byte)0xed, 
        (byte)0x76, (byte)0xb7, (byte)0x77, (byte)0xb8, 
        (byte)0xd3, (byte)0xeb, (byte)0x18, (byte)0x96, 
        (byte)0x31, (byte)0x1f, (byte)0x4d, (byte)0x41, 
        (byte)0x94, (byte)0x0c, (byte)0x01, (byte)0x19, 
        (byte)0x80, (byte)0x06, (byte)0x60, (byte)0x70, 
        (byte)0xd3, (byte)0xf5, (byte)0xda, (byte)0xb6, 
        (byte)0x6d, (byte)0xbb, (byte)0xae, (byte)0x76, 
        (byte)0xe7, (byte)0x35, (byte)0xed, (byte)0x76, 
        (byte)0x3b, (byte)0x8e, (byte)0x63, (byte)0x00, 
        (byte)0xe8, (byte)0xf7, (byte)0xfb, (byte)0x41, 
        (byte)0x10, (byte)0x24, (byte)0x49, (byte)0x72, 
        (byte)0x7e, (byte)0x7e, (byte)0xfe, (byte)0x7e, 
        (byte)0x14, (byte)0x9a, (byte)0x0c, (byte)0x62, 
        (byte)0xbd, (byte)0xc0, (byte)0xff, (byte)0x4e, 
        (byte)0x62, (byte)0x6f, (byte)0xda, (byte)0x71, 
        (byte)0x54, (byte)0xdd, (byte)0x56, (byte)0x80, 
        (byte)0x40, (byte)0x5a, (byte)0xae, (byte)0x26, 
        (byte)0x09, (byte)0xc3, (byte)0x30, (byte)0x38, 
        (byte)0xe7, (byte)0x35, (byte)0x5f, (byte)0xd5, 
        (byte)0xbc, (byte)0xb2, (byte)0x73, (byte)0xb5, 
        (byte)0xa6, (byte)0xd3, (byte)0x69, (byte)0x59, 
        (byte)0x96, (byte)0x96, (byte)0x65, (byte)0x65, 
        (byte)0x59, (byte)0x36, (byte)0x1a, (byte)0x8d, 
        (byte)0x76, (byte)0xfa, (byte)0x30, (byte)0x00, 
        (byte)0x14, (byte)0x45, (byte)0xb1, (byte)0x16, 
        (byte)0xeb, (byte)0x42, (byte)0x14, (byte)0xc0, 
        (byte)0x98, (byte)0xce, (byte)0x18, (byte)0x30, 
        (byte)0xe0, (byte)0x1a, (byte)0xaf, (byte)0x87, 
        (byte)0xab, (byte)0xb7, (byte)0x3d, (byte)0x49, 
        (byte)0x92, (byte)0xc9, (byte)0x64, (byte)0x42, 
        (byte)0xc2, (byte)0x9d, (byte)0x6a, (byte)0x90, 
        (byte)0xa3, (byte)0xd1, (byte)0xa8, (byte)0x19, 
        (byte)0xf1, (byte)0x19, (byte)0x63, (byte)0x08, 
        (byte)0xc0, (byte)0x14, (byte)0xa2, (byte)0xfe, 
        (byte)0xf1, (byte)0x84, (byte)0x0a, (byte)0x01, 
        (byte)0x8f, (byte)0x64, (byte)0x29, (byte)0xa5, 
        (byte)0x90, (byte)0x84, (byte)0xad, (byte)0x96, 
        (byte)0x3c, (byte)0xb4, (byte)0x51, (byte)0xa6, 
        (byte)0x69, (byte)0x32, (byte)0xc6, (byte)0x58, 
        (byte)0xe3, (byte)0x9e, (byte)0xa1, (byte)0x66, 
        (byte)0x9d, (byte)0x26, (byte)0xbb, (byte)0x84, 
        (byte)0x61, (byte)0x18, (byte)0x04, (byte)0x41, 
        (byte)0x10, (byte)0x04, (byte)0x65, (byte)0x59, 
        (byte)0x8e, (byte)0x46, (byte)0xa3, (byte)0xe6, 
        (byte)0x12, (byte)0x44, (byte)0x51, (byte)0xb4, 
        (byte)0x11, (byte)0x4e, (byte)0x10, (byte)0x51, 
        (byte)0xa1, (byte)0x02, (byte)0x84, (byte)0xf7, 
        (byte)0x12, (byte)0x84, (byte)0x6b, (byte)0x3a, 
        (byte)0xd3, (byte)0x9b, (byte)0x4d, (byte)0x10, 
        (byte)0x71, (byte)0x3a, (byte)0x9d, (byte)0x4a, 
        (byte)0x29, (byte)0x67, (byte)0xb3, (byte)0x99, 
        (byte)0x52, (byte)0x6a, (byte)0x3c, (byte)0x1e, 
        (byte)0xdb, (byte)0xb6, (byte)0x4d, (byte)0x27, 
        (byte)0xfc, (byte)0x80, (byte)0x14, (byte)0x11, 
        (byte)0x01, (byte)0xbf, (byte)0x2a, (byte)0x65, 
        (byte)0xb9, (byte)0x01, (byte)0x8f, (byte)0x6b, 
        (byte)0x9a, (byte)0x65, (byte)0x59, (byte)0xb6, 
        (byte)0x6d, (byte)0x1b, (byte)0x86, (byte)0xa1, 
        (byte)0xdf, (byte)0xc1, (byte)0xa3, (byte)0x1a, 
        (byte)0x26, (byte)0x22, (byte)0x36, (byte)0xc9, 
        (byte)0x33, (byte)0x49, (byte)0x92, (byte)0x30, 
        (byte)0x0c, (byte)0x87, (byte)0xc3, (byte)0xa1, 
        (byte)0xae, (byte)0xeb, (byte)0x42, (byte)0x08, 
        (byte)0x5a, (byte)0x91, (byte)0xe6, (byte)0x00, 
        (byte)0xad, (byte)0x56, (byte)0x8b, (byte)0x12, 
        (byte)0xab, (byte)0xfa, (byte)0x09, (byte)0x63, 
        (byte)0xcc, (byte)0xd0, (byte)0x0d, (byte)0xda, 
        (byte)0x34, (byte)0xcb, (byte)0xb2, (byte)0x0c, 
        (byte)0xdd, (byte)0xd8, (byte)0x68, (byte)0xc2, 
        (byte)0x18, (byte)0xeb, (byte)0x74, (byte)0x3a, 
        (byte)0x65, (byte)0x59, (byte)0xae, (byte)0x56, 
        (byte)0x2b, (byte)0x5d, (byte)0xd7, (byte)0x5d, 
        (byte)0xd7, (byte)0xcd, (byte)0xf3, (byte)0x1c, 
        (byte)0x9f, (byte)0x50, (byte)0x17, (byte)0x7e, 
        (byte)0x56, (byte)0xd3, (byte)0x06, (byte)0x51, 
        (byte)0xbf, (byte)0x65, (byte)0x59, (byte)0x4d, 
        (byte)0x0c, (byte)0x64, (byte)0x45, (byte)0x51, 
        (byte)0x50, (byte)0x9a, (byte)0xdb, (byte)0x7c, 
        (byte)0x28, (byte)0x84, (byte)0x08, (byte)0x82, 
        (byte)0xc0, (byte)0xf7, (byte)0xfd, (byte)0x93, 
        (byte)0x93, (byte)0x13, (byte)0x5a, (byte)0x82, 
        (byte)0xed, (byte)0xf2, (byte)0x26, (byte)0x49, 
        (byte)0x9c, (byte)0x20, (byte)0x08, (byte)0x5c, 
        (byte)0xd7, (byte)0xf5, (byte)0x7d, (byte)0xff, 
        (byte)0x81, (byte)0x65, (byte)0x08, (byte)0xdb, 
        (byte)0xb6, (byte)0xbb, (byte)0xdd, (byte)0xee, 
        (byte)0xd5, (byte)0xd5, (byte)0x15, (byte)0x85, 
        (byte)0x0d, (byte)0xa5, (byte)0x14, (byte)0x34, 
        (byte)0xf8, (byte)0xfc, (byte)0xd1, (byte)0x10, 
        (byte)0xd3, (byte)0x34, (byte)0x8d, (byte)0xe3, 
        (byte)0x38, (byte)0x4d, (byte)0xd3, (byte)0xdb, 
        (byte)0x72, (byte)0x77, (byte)0x59, (byte)0x51, 
        (byte)0x4a, (byte)0x59, (byte)0x57, (byte)0x07, 
        (byte)0x9b, (byte)0x65, (byte)0xbf, (byte)0xf1, 
        (byte)0x78, (byte)0x7c, (byte)0x7e, (byte)0x7e, 
        (byte)0x5e, (byte)0x7f, (byte)0xec, (byte)0xf7, 
        (byte)0xfb, (byte)0x2f, (byte)0x5f, (byte)0xbe, 
        (byte)0x6c, (byte)0xb6, (byte)0xda, (byte)0xae, 
        (byte)0x76, (byte)0x1a, (byte)0x86, (byte)0x11, 
        (byte)0x86, (byte)0x61, (byte)0xb3, (byte)0x9f, 
        (byte)0x38, (byte)0x8e, (byte)0x67, (byte)0xb3, 
        (byte)0x99, (byte)0x94, (byte)0x72, (byte)0x7b, 
        (byte)0xdc, (byte)0xc9, (byte)0x64, (byte)0x32, 
        (byte)0x18, (byte)0x0c, (byte)0x3a, (byte)0x9d, 
        (byte)0xce, (byte)0x6c, (byte)0x36, (byte)0xa3, 
        (byte)0x27, (byte)0x7b, (byte)0xca, (byte)0x90, 
        (byte)0xfb, (byte)0xaa, (byte)0x89, (byte)0xba, 
        (byte)0xae, (byte)0x2b, (byte)0xa5, (byte)0x6c, 
        (byte)0xc7, (byte)0xde, (byte)0x79, (byte)0xc1, 
        (byte)0x46, (byte)0x92, (byte)0x62, (byte)0x7b, 
        (byte)0xe5, (byte)0xf2, (byte)0x3c, (byte)0x4f, 
        (byte)0xd3, (byte)0xb4, (byte)0x4e, (byte)0xe4, 
        (byte)0xc9, (byte)0x11, (byte)0x9a, (byte)0x7b, 
        (byte)0xd8, (byte)0xef, (byte)0xf7, (byte)0x37, 
        (byte)0x32, (byte)0x0c, (byte)0x4a, (byte)0x7c, 
        (byte)0xa2, (byte)0x28, (byte)0xea, (byte)0x74, 
        (byte)0x3a, (byte)0x54, (byte)0x16, (byte)0x18, 
        (byte)0x8f, (byte)0xc7, (byte)0x88, (byte)0x68, 
        (byte)0x9a, (byte)0x26, (byte)0xa5, (byte)0xcb, 
        (byte)0x88, (byte)0x58, (byte)0x6f, (byte)0x32, 
        (byte)0x65, (byte)0xd8, (byte)0x71, (byte)0x1c, 
        (byte)0x8f, (byte)0x46, (byte)0xa3, (byte)0xc1, 
        (byte)0x60, (byte)0x00, (byte)0x4f, (byte)0xb8, 
        (byte)0xdf, (byte)0x7c, (byte)0x66, (byte)0x5a, 
        (byte)0xa6, (byte)0x05, (byte)0x3b, (byte)0xca, 
        (byte)0x5e, (byte)0x70, (byte)0x17, (byte)0x7f, 
        (byte)0x9a, (byte)0xd1, (byte)0xbf, (byte)0x8e, 
        (byte)0xfb, (byte)0xab, (byte)0xd5, (byte)0x8a, 
        (byte)0x2a, (byte)0x62, (byte)0xf4, (byte)0x9c, 
        (byte)0x68, (byte)0x83, (byte)0x78, (byte)0x48, 
        (byte)0x29, (byte)0x35, (byte)0x99, (byte)0x4c, 
        (byte)0x36, (byte)0x52, (byte)0x44, (byte)0xc7, 
        (byte)0x71, (byte)0xa2, (byte)0x28, (byte)0xd2, 
        (byte)0x75, (byte)0x9d, (byte)0x0e, (byte)0xb3, 
        (byte)0x10, (byte)0x62, (byte)0x32, (byte)0x99, 
        (byte)0x10, (byte)0x03, (byte)0x91, (byte)0x36, 
        (byte)0x98, (byte)0xcf, (byte)0xe7, (byte)0xab, 
        (byte)0xd5, (byte)0x6a, (byte)0xb5, (byte)0x5a, 
        (byte)0x31, (byte)0xc6, (byte)0x7a, (byte)0xbd, 
        (byte)0xde, (byte)0xd9, (byte)0xd9, (byte)0x99, 
        (byte)0xeb, (byte)0xba, (byte)0x61, (byte)0x18, 
        (byte)0x12, (byte)0xc3, (byte)0x33, (byte)0xc6, 
        (byte)0x0e, (byte)0x3e, (byte)0x8a, (byte)0xfb, 
        (byte)0x74, (byte)0xe9, (byte)0xb6, (byte)0xdf, 
        (byte)0xd7, (byte)0x08, (byte)0xa9, (byte)0x52, 
        (byte)0x94, (byte)0xe7, (byte)0x39, (byte)0xa1, 
        (byte)0xa2, (byte)0xba, (byte)0x13, (byte)0x05, 
        (byte)0xeb, (byte)0xf5, (byte)0x7a, (byte)0x4d, 
        (byte)0xf7, (byte)0x30, (byte)0x4d, (byte)0xe3, 
        (byte)0x9c, (byte)0xd3, (byte)0x4a, (byte)0xd1, 
        (byte)0xa2, (byte)0x50, (byte)0x43, (byte)0x22, 
        (byte)0x1b, (byte)0x72, (byte)0xe6, (byte)0xf3, 
        (byte)0xf3, (byte)0x73, (byte)0xc7, (byte)0x71, 
        (byte)0x82, (byte)0x20, (byte)0xd0, (byte)0x34, 
        (byte)0x8d, (byte)0xa2, (byte)0x2b, (byte)0x00, 
        (byte)0x9c, (byte)0x9e, (byte)0x9e, (byte)0x8e, 
        (byte)0x46, (byte)0xa3, (byte)0x2c, (byte)0xcb, 
        (byte)0x9c, (byte)0x93, (byte)0x13, (byte)0x40, 
        (byte)0x64, (byte)0x07, (byte)0xd5, (byte)0x4b, 
        (byte)0xef, (byte)0xad, (byte)0x62, (byte)0x20, 
        (byte)0xe2, (byte)0xcd, (byte)0xcd, (byte)0x4d, 
        (byte)0x5d, (byte)0x2c, (byte)0x20, (byte)0xa3, 
        (byte)0x92, (byte)0x01, (byte)0x63, (byte)0xcc, 
        (byte)0x75, (byte)0xdd, (byte)0x3f, (byte)0xff, 
        (byte)0xfc, (byte)0xf3, (byte)0xf2, (byte)0xf2, 
        (byte)0xf2, (byte)0xaf, (byte)0xbf, (byte)0xfe, 
        (byte)0xa2, (byte)0xbb, (byte)0x41, (byte)0x44, 
        (byte)0xb4, (byte)0x6d, (byte)0xdb, (byte)0xb2, 
        (byte)0xac, (byte)0x6e, (byte)0xb7, (byte)0x4b, 
        (byte)0x39, (byte)0xe4, (byte)0xf5, (byte)0xf5, 
        (byte)0x35, (byte)0x79, (byte)0xaf, (byte)0x6d, 
        (byte)0xdb, (byte)0xbf, (byte)0xfe, (byte)0xfa, 
        (byte)0xeb, (byte)0x8f, (byte)0x3f, (byte)0xfe, 
        (byte)0x58, (byte)0xf7, (byte)0x33, (byte)0x9f, 
        (byte)0xcf, (byte)0x7f, (byte)0xff, (byte)0xfd, 
        (byte)0x77, (byte)0x44, (byte)0xf4, (byte)0x3c, 
        (byte)0xef, (byte)0x9f, (byte)0x7f, (byte)0xfe, 
        (byte)0x79, (byte)0xfd, (byte)0xfa, (byte)0x35, 
        (byte)0x85, (byte)0xdc, (byte)0x56, (byte)0xab, 
        (byte)0xf5, (byte)0xf6, (byte)0xed, (byte)0x5b, 
        (byte)0xcf, (byte)0xf3, (byte)0xa8, (byte)0xb2, 
        (byte)0x76, (byte)0x7c, (byte)0x7c, (byte)0x7c, 
        (byte)0x73, (byte)0x73, (byte)0xf3, (byte)0xfa, 
        (byte)0xf5, (byte)0xeb, (byte)0xd6, (byte)0x77, 
        (byte)0xdf, (byte)0xb1, (byte)0x2d, (byte)0xfe, 
        (byte)0x7b, (byte)0x88, (byte)0xdd, (byte)0xc0, 
        (byte)0xcd, (byte)0xbd, (byte)0x7b, (byte)0x78, 
        (byte)0x5f, (byte)0x5d, (byte)0xa8, (byte)0x2e, 
        (byte)0x1f, (byte)0x5e, (byte)0x5c, (byte)0x5c, 
        (byte)0xc0, (byte)0x5d, (byte)0x02, (byte)0x1e, 
        (byte)0x45, (byte)0x51, (byte)0x96, (byte)0x65, 
        (byte)0x83, (byte)0xc1, (byte)0x60, (byte)0x23, 
        (byte)0x18, (byte)0x46, (byte)0x51, (byte)0xa4, 
        (byte)0x69, (byte)0xda, (byte)0x36, (byte)0x8b, 
        (byte)0xb6, (byte)0xdb, (byte)0x6d, (byte)0x2a, 
        (byte)0x76, (byte)0x94, (byte)0x65, (byte)0x39, 
        (byte)0x18, (byte)0x0c, (byte)0x2c, (byte)0xcb, 
        (byte)0xaa, (byte)0xd3, (byte)0x2e, (byte)0xaa, 
        (byte)0x8f, (byte)0xd4, (byte)0x6f, (byte)0x7a, 
        (byte)0x9e, (byte)0x17, (byte)0x86, (byte)0x61, 
        (byte)0x59, (byte)0x55, (byte)0x87, (byte)0x89, 
        (byte)0x52, (byte)0xd8, (byte)0xef, (byte)0xa5, 
        (byte)0xdb, (byte)0x20, (byte)0x29, (byte)0x9d, 
        (byte)0x69, (byte)0x86, (byte)0x8d, (byte)0x66, 
        (byte)0x5e, (byte)0xb3, (byte)0xf1, (byte)0x55, 
        (byte)0xbb, (byte)0xdd, (byte)0xbe, (byte)0xaf, 
        (byte)0x7a, (byte)0x4f, (byte)0xea, (byte)0x6c, 
        (byte)0xb5, (byte)0x5a, (byte)0x65, (byte)0x59, 
        (byte)0x36, (byte)0x9f, (byte)0xcf, (byte)0xbb, 
        (byte)0xdd, (byte)0x2e, (byte)0x65, (byte)0x9e, 
        (byte)0x61, (byte)0x18, (byte)0x02, (byte)0x80, 
        (byte)0x94, (byte)0xb2, (byte)0xee, (byte)0x87, 
        (byte)0x22, (byte)0x6d, (byte)0x51, (byte)0x14, 
        (byte)0x3b, (byte)0x6b, (byte)0xe4, (byte)0x0f, 
        (byte)0xb1, (byte)0xc7, (byte)0xe5, (byte)0xf8, 
        (byte)0xc4, (byte)0xab, (byte)0x45, (byte)0x51, 
        (byte)0x6c, (byte)0x4b, (byte)0xb3, (byte)0x3b, 
        (byte)0xdd, (byte)0xfa, (byte)0x20, (byte)0xa3, 
        (byte)0x75, (byte)0xe9, (byte)0x74, (byte)0x3a, 
        (byte)0x14, (byte)0x30, (byte)0x69, (byte)0x69, 
        (byte)0x34, (byte)0x4d, (byte)0xeb, (byte)0x76, 
        (byte)0xbb, (byte)0x61, (byte)0x18, (byte)0x46, 
        (byte)0x51, (byte)0xd4, (byte)0xac, (byte)0xc4, 
        (byte)0x20, (byte)0xa2, (byte)0x90, (byte)0xf2, 
        (byte)0xe4, (byte)0x51, (byte)0x13, (byte)0x6d, 
        (byte)0xd8, (byte)0xa3, (byte)0xab, (byte)0x18, 
        (byte)0x14, (byte)0x5d, (byte)0x48, (byte)0x03, 
        (byte)0xd4, (byte)0x34, (byte)0xeb, (byte)0xba, 
        (byte)0x2e, (byte)0x29, (byte)0xe6, (byte)0x87, 
        (byte)0xdb, (byte)0x78, (byte)0x3c, (byte)0x06, 
        (byte)0x80, (byte)0x7e, (byte)0xbf, (byte)0x9f, 
        (byte)0x65, (byte)0xd9, (byte)0x6c, (byte)0x36, 
        (byte)0xb3, (byte)0x2c, (byte)0x8b, (byte)0x73, 
        (byte)0x6e, (byte)0x18, (byte)0x06, (byte)0xc5, 
        (byte)0x86, (byte)0xa6, (byte)0x21, (byte)0xd5, 
        (byte)0x26, (byte)0x0e, (byte)0xb5, (byte)0x43, 
        (byte)0x2a, (byte)0xc2, (byte)0xba, (byte)0xae, 
        (byte)0x93, (byte)0x4f, (byte)0x52, (byte)0xb2, 
        (byte)0x4b, (byte)0xfb, (byte)0xf9, (byte)0xd8, 
        (byte)0x9f, (byte)0x20, (byte)0xd0, (byte)0x11, 
        (byte)0x18, (byte)0x0e, (byte)0x87, (byte)0xbd, 
        (byte)0x5e, (byte)0xaf, (byte)0x99, (byte)0xf2, 
        (byte)0x6e, (byte)0xe8, (byte)0x04, (byte)0x52, 
        (byte)0xff, (byte)0xf7, (byte)0xa9, (byte)0xf9, 
        (byte)0x87, (byte)0xd8, (byte)0x81, (byte)0x35, 
        (byte)0x6f, (byte)0x22, (byte)0x9b, (byte)0xfa, 
        (byte)0xf8, (byte)0xe9, (byte)0xba, (byte)0xee, 
        (byte)0x79, (byte)0x9e, (byte)0x94, (byte)0xb2, 
        (byte)0x3e, (byte)0x96, (byte)0x0f, (byte)0xbc, 
        (byte)0x4e, (byte)0x71, (byte)0x1c, (byte)0x67, 
        (byte)0xbf, (byte)0x94, (byte)0xa3, (byte)0xb8, 
        (byte)0x7a, (byte)0xf0, (byte)0x21, (byte)0x84, 
        (byte)0x27, (byte)0xde, (byte)0x72, (byte)0x93, 
        (byte)0xa3, (byte)0x92, (byte)0x8e, (byte)0x25, 
        (byte)0xbd, (byte)0x52, (byte)0x17, (byte)0x75, 
        (byte)0x3e, (byte)0x9a, (byte)0xb6, (byte)0x3d, 
        (byte)0xc4, (byte)0x94, (byte)0x52, (byte)0xf3, 
        (byte)0xf9, (byte)0x9c, (byte)0x4e, (byte)0xfe, 
        (byte)0xc1, (byte)0x9d, (byte)0x7c, (byte)0x82, 
        (byte)0x3b, (byte)0x60, (byte)0x32, (byte)0xdb, 
        (byte)0xb6, (byte)0x83, (byte)0x20, (byte)0xe8, 
        (byte)0xf5, (byte)0x7a, (byte)0x7b, (byte)0x2a, 
        (byte)0x28, (byte)0x14, (byte)0x21, (byte)0xb2, 
        (byte)0x2c, (byte)0x93, (byte)0x52, (byte)0x22, 
        (byte)0x22, (byte)0x91, (byte)0x93, (byte)0x69, 
        (byte)0x9a, (byte)0xa6, (byte)0x69, (byte)0x3a, 
        (byte)0x8e, (byte)0x43, (byte)0x85, (byte)0xe6, 
        (byte)0xfa, (byte)0xe5, (byte)0x3c, (byte)0xcf, 
        (byte)0xfb, (byte)0xfd, (byte)0x3e, (byte)0x25, 
        (byte)0x50, (byte)0x94, (byte)0x5b, (byte)0xd7, 
        (byte)0x5f, (byte)0x85, (byte)0x61, (byte)0x48, 
        (byte)0x9c, (byte)0xf4, (byte)0x90, (byte)0x89, 
        (byte)0x7d, (byte)0xbc, (byte)0x12, (byte)0xf5, 
        (byte)0x70, (byte)0x1b, (byte)0x0e, (byte)0x87, 
        (byte)0x4a, (byte)0x29, (byte)0x8a, (byte)0x93, 
        (byte)0x4d, (byte)0x2b, (byte)0x8a, (byte)0x62, 
        (byte)0xb1, (byte)0x58, (byte)0xc4, (byte)0x71, 
        (byte)0x4c, (byte)0x77, (byte)0xa9, (byte)0xae, 
        (byte)0xeb, (byte)0xda, (byte)0xb6, (byte)0x4d, 
        (byte)0x24, (byte)0x49, (byte)0xc2, (byte)0x28, 
        (byte)0xcb, (byte)0xb2, (byte)0x34, (byte)0x4d, 
        (byte)0x89, (byte)0x51, (byte)0x89, (byte)0x72, 
        (byte)0x84, (byte)0x10, (byte)0xa4, (byte)0xf2, 
        (byte)0x16, (byte)0x8b, (byte)0x45, (byte)0x1d, 
        (byte)0x72, (byte)0x08, (byte)0x55, (byte)0x0d, 
        (byte)0xf5, (byte)0x21, (byte)0x08, (byte)0x11, 
        (byte)0xf0, (byte)0xe8, (byte)0xf6, (byte)0xf6, 
        (byte)0xf6, (byte)0x93, (byte)0xc0, (byte)0x03, 
        (byte)0x00, (byte)0x44, (byte)0xa4, (byte)0xbb, 
        (byte)0xee, (byte)0xf1, (byte)0x78, (byte)0x4c, 
        (byte)0x77, (byte)0xb7, (byte)0x51, (byte)0x14, 
        (byte)0xc5, (byte)0x71, (byte)0x5c, (byte)0x96, 
        (byte)0xa5, (byte)0xe7, (byte)0x79, (byte)0xdd, 
        (byte)0x6e, (byte)0x97, (byte)0x80, (byte)0x6d, 
        (byte)0x7b, (byte)0x2f, (byte)0xf9, (byte)0x36, 
        (byte)0x45, (byte)0x8e, (byte)0xf5, (byte)0x7a, 
        (byte)0x4d, (byte)0x9a, (byte)0xce, (byte)0xf3, 
        (byte)0xbc, (byte)0x8d, (byte)0xab, (byte)0xe2, 
        (byte)0x1a, (byte)0xe1, (byte)0xe3, (byte)0xf6, 
        (byte)0xf0, (byte)0xd3, (byte)0xfe, (byte)0x36, 
        (byte)0x11, (byte)0x11, (byte)0x87, (byte)0x2f, 
        (byte)0x86, (byte)0xcb, (byte)0xe5, (byte)0x52, 
        (byte)0xd3, (byte)0x34, (byte)0xc3, (byte)0x30, 
        (byte)0x5a, (byte)0xad, (byte)0x96, (byte)0xdf, 
        (byte)0xf1, (byte)0xdb, (byte)0xed, (byte)0xf6, 
        (byte)0xd3, (byte)0xcf, (byte)0xe4, (byte)0x41, 
        (byte)0xc6, (byte)0x10, (byte)0xd4, (byte)0xff, 
        (byte)0x01, (byte)0x10, (byte)0x24, (byte)0x35, 
        (byte)0x50, (byte)0x14, (byte)0xbe, (byte)0x20, 
        (byte)0x14, (byte)0x00, (byte)0x00, (byte)0x00, 
        (byte)0x00, (byte)0x49, (byte)0x45, (byte)0x4e, 
        (byte)0x44, (byte)0xae, (byte)0x42, (byte)0x60, 
        (byte)0x82, 
    };

    class Band {
        private NumberedHashtable table;

        class TicketItem {
            // Ticket info
            String name;   // item name i.e. band name
            String seat;   // seat number
            String sect;   // seat section
            String date;   // concert date
            String place;  // concert place
            String state;  // place's state

            // Bid info
            String id;        // id i.e. item number
            String numItem;   // quantity
            String fstBid;    // first bid price
            String curBid;    // current bid price
            String incBid;    // bid increment
            String numBids;   // # of bids
            String endsAt;    // Bid close time

            TicketItem(String name,
                       String seat,
                       String sect,
                       String date,
                       String place,
                       String state,
                       String id,
                       String numItem,
                       String fstBid,
                       String curBid,
                       String incBid,
                       String numBids,
                       String endsAt) {
                this.name = name;
                this.seat = seat;
                this.sect = sect;
                this.date = date;
                this.place = place;
                this.state = state;
                this.id = id;
                this.numItem = numItem;
                this.fstBid = fstBid;
                this.curBid = curBid;
                this.incBid = incBid;
                this.numBids = numBids;
                this.endsAt = endsAt;
            }

            TicketItem(String name) {
                this(name, "n/a", "n/a", "n/a", "n/a", "n/a", 
                     "0", "0", "0", "0", "0", "0", "0");
            }
        }

        class NumberedHashtable { // sort of, but totally different
            private Vector vec = new Vector();
            NumberedHashtable() {
                vec = new Vector();
            }
            void put(int nth, Object obj) {
                Object o = null;
                try { 
                    o = vec.elementAt(nth);
                } catch (ArrayIndexOutOfBoundsException e) {
                    o = null;
                }
                if (o == null) {
                    vec.addElement(obj);
                } else {
                    vec.setElementAt(obj, nth);
                }
            }
            Object get(String name) {
                int num = vec.size();
                for (int i = 0; i < num; i++) {
                    Object obj = vec.elementAt(i);
                    if (obj instanceof Vector) {
                        Vector v = (Vector) obj;
                        TicketItem item = (TicketItem) v.elementAt(0);
                        if (item.name.equals(name)) {
                            return obj;
                        }
                    }
                }
                return null;
            }
            Object elementAt(int index) {
                return vec.elementAt(index);
            }
            void remove(int i) {
                Object o = null;
                try { 
                    o = vec.elementAt(i);
                } catch (ArrayIndexOutOfBoundsException e) {
                    o = null;
                }
                if (o != null) {
                    vec.removeElementAt(i);
                }
            }
            int size() {
                return vec.size();
            }
        }

        Band() {
            table = new NumberedHashtable();
        
            TicketItem t;

            /**
             * 0: Mariah Carey
             */
            t = new TicketItem("Mariah Carey",
                               "18&19",
                               "XF, Row 17",
                               "Mar 28, 2000",
                               "San Francisco",
                               "CA",
                               "7720",
                               "2",
                               "45.00",
                               "69.00",
                               "1.00",
                               "3",
                               "11:00 am");
            add(0, "Mariah Carey", t);

            /**
             * 1: Britney Spears
             */
            t = new TicketItem("Britney Spears",
                               "10",
                               "F9, Row A",
                               "Mar 30, 2000",
                               "Worchester",
                               "MA",
                               "4509",
                               "1",
                               "20.00",
                               "21.00",
                               "1.00",
                               "1",
                               "9:45 pm");
            add(1, "Britney Spears", t);

            t = new TicketItem("Britney Spears",
                               "69&70",
                               "PIT Rw 1",
                               "Aug 5, 2000",
                               "Devore",
                               "Ca",
                               "3058",
                               "2",
                               "9.00",
                               "175.00",
                               "2.50",
                               "40",
                               "9:00 pm");
            add(1, "Britney Spears", t);

            t = new TicketItem("Britney Spears",
                               "5&6&7",
                               "PIT Rw 11",
                               "Aug 5, 2000",
                               "Devore",
                               "Ca",
                               "3541",
                               "3",
                               "28.00",
                               "97.00",
                               "1.00",
                               "11",
                               "11:15 pm");
            add(1, "Britney Spears", t);

            /**
             * 2: Ricky Martin
             */
            t = new TicketItem("Ricky Martin",
                               "11&12",
                               "F Row J",
                               "May 11, 2000",
                               "Shoreline Ctr.",
                               "Columbus",
                               "3861",
                               "2",
                               "60.00",
                               "90.00",
                               "5.00",
                               "3",
                               "6:30 pm");
            add(2, "Ricky Martin", t);

            t = new TicketItem("Ricky Martin",
                               "4&6",
                               "N2 Row 5",
                               "May 12, 2000",
                               "NJ Concert Ctr.",
                               "New Jersey",
                               "9916",
                               "2",
                               "70.00",
                               "200.00",
                               "10.00",
                               "12",
                               "9:30 pm");
            add(2, "Ricky Martin", t);

            t = new TicketItem("Ricky Martin",
                               "20&22",
                               "KK Row 18",
                               "May 14, 2000",
                               "Gaylord Ctr",
                               "Nashville",
                               "3869",
                               "2",
                               "75.00",
                               "110.00",
                               "2.00",
                               "12",
                               "4:00 pm");
            add(2, "Ricky Martin", t);

            /**
             * 3: Tina Turner
             */
            t = new TicketItem("Tina Turner",
                               "7 & 8",
                               "NN Row 7",
                               "April 24, 2000",
                               "Opera House",
                               "Austin, TX",
                               "1313",
                               "2",
                               "60.00",
                               "67.00",
                               "1.00",
                               "7",
                               "20:25 pm");
            add(3, "Tina Turner", t);

            /**
             * 4: Bruce Springsteen
             */
            t = new TicketItem("Bruce Springsteen",
                               "N&O",
                               "S, Row 14",
                               "April 2, 2000",
                               "San Francisco",
                               "CA",
                               "8120",
                               "2",
                               "80.00",
                               "125.00",
                               "2.00",
                               "5",
                               "11:30 am");
            add(4, "Bruce Springsteen", t);

            /**
             * 5: Red Hot Chili Peppers
             */
            t = new TicketItem("Red Hot Chili Peppers",
                               "3 & 4",
                               "M Row 12",
                               "April 18, 2000",
                               "SF/Fillmore",
                               "CA",
                               "2255",
                               "2",
                               "90.00",
                               "150.00",
                               "1.00",
                               "7",
                               "7:30 pm");
            add(5, "Red Hot Chili Peppers", t);
        }

        void add(String name) {
            add(table.size(), name, new TicketItem(name));
        }

        void add(int i, String name) {
            add(i, name, new TicketItem(name));
        }

        void add(int i, String name, TicketItem item) {
            Object obj = table.get(name);
            Vector vec = (obj == null) ? new Vector() : (Vector) obj;
            vec.addElement(item);
            table.put(i, vec);
        }

        void remove(int i) {
            table.remove(i);
        }

        String[] getList() {
            int num = table.size();
            String seq[] = new String[num];
            for (int i = 0; i < num; i++) {
                Vector vec = (Vector) table.elementAt(i);
                TicketItem item = (TicketItem) vec.elementAt(0);
                seq[i] = item.name;
            }
            return seq;
        }

        String getName(int nth) {
            Vector vec = (Vector) table.elementAt(nth);
            if (vec != null) {
                TicketItem item = (TicketItem) vec.elementAt(0);
                if (item != null) {
                    return item.name;
                }
            }
            return null;
        }

        String[] getTicketList(String name) {
            Object obj = table.get(name);
            if (obj == null) {
                return null;
            }

            Vector vec = (Vector) obj;
            int num = vec.size();
            String seq[] = new String[num];

            for (int i = 0; i < num; i++) {
                TicketItem item = (TicketItem) vec.elementAt(i);
                seq[i] = new String(
                    "#" + item.id + " $" + item.curBid + "\n" +
                    item.place + ", " + item.state + "\n" +
                    item.sect + "," + item.seat + " ...");
            }

            return seq;
        }

        TicketItem getTicketItem(String name, int nth) {
            Object obj = table.get(name);
            if (obj == null) {
                return null;
            }
            Vector vec = (Vector) obj;
            return (TicketItem) vec.elementAt(nth);
        }

        String getTicketID(String name, int nth) {
            TicketItem item = getTicketItem(name, nth);
            if (item == null) {
                return null;
            }
            return item.id;
        }

        String getTicketDataTitle(String name, int nth) {
            TicketItem item = getTicketItem(name, nth);
            if (item == null) {
                return null;
            }
            return "#" + item.id + " " + item.name;
        }

        String getTicketData(String name, int nth) {
            TicketItem item = getTicketItem(name, nth);
            if (item == null) {
                return null;
            }

            return 
                "Quantity: " + item.numItem + "\n" + 
                "Starts at:\n" +
                "    $" + item.fstBid + "\n" + 
                "Current:\n" +
                "    $" + item.curBid + "\n" + 
                "Bids: " + item.numBids + "\n" + 
                "Ends at:\n" +
                "   " + item.endsAt + "\n" + 
                "Sec: " + item.sect + "\n" + 
                "Seat(s): " + item.seat + "\n" + 
                item.date + "\n" +
                item.place + "," + item.state;
        }

        boolean isTicketData(String bandName, String itemID) {
            return (getTicketItem(bandName, itemID) == null) ? false : true;
        }
        
        TicketItem getTicketItem(String bandName, String itemID) {
            Object obj = table.get(bandName);
            if (obj == null) {
                return null;
            }

            Vector vec = (Vector) obj;
            int num = vec.size();

            for (int i = 0; i < num; i++) {
                TicketItem item = (TicketItem) vec.elementAt(i);
                if (item.id.equals(itemID)) {
                    return item;
                }
            }

            return null;
        }

        String getTicketBidTitle(String bandName, int itemID) {
            TicketItem item = getTicketItem(bandName, itemID);
            long min = stringToLong1000(item.curBid) + 
                stringToLong1000(item.incBid);
            String minBid = long1000ToString(min);

            return 
                "Current Bid:\n" +
                "  $" + item.curBid + "\n" +
                "Increment:\n" +
                "  $" + item.incBid + "\n" +
                "Minimum Bid:\n" +
                "  $" + minBid + "\n" +
                "Enter Bid:";
        }

        String def_ticker = "Ricky Martin 2 tix $90.00 2 tix $110.00 "
	    +"2 tix $200.00 Tina Turner 2 tix $65.00";
        String alt_ticker = "Alanis Morisette 2 tix $58.00 4 tix $115.00"
	    + " Fiona Apple 2 tix $37.00";

        String toTickerString(boolean[] selected) {
            String s = "";

            if (selected == null) {
                return alt_ticker;
            }

            // My Bands
            if (selected[0]) {
                s += def_ticker;
            }
            // Pop
            if (selected[1]) {
            }
            // Rock
            if (selected[2]) {
            }
            // Alternative
            if (selected[3]) {
                if (s.length() > 0) {
                    s += " ";
                }
                s += alt_ticker;
            }
            // Jazz
            if (selected[4]) {
            }
            // Classical
            if (selected[5]) {
            }

            return s;
        }

        long stringToLong1000(String s) {
            if (s == null || s.equals("")) {
                return 0;
            }
            try {
                int index = s.indexOf('.');
                if (index == -1)
                    return (long)1000*Integer.parseInt(s);

                long integerPart = 1000*Integer.parseInt(s.substring(0, index));
                String fracString = s.substring(index+1);
                int multBy = 0;
                switch (fracString.length()) {
                case 0:
                    multBy = 0;
                    break;
                case 1:
                    multBy = 100;
                    break;
                case 2:
                    multBy = 10;
                    break;
                case 3:
                    multBy = 1;
                    break;
                }

                long fractionalPart = multBy * Integer.parseInt(fracString);
                return integerPart + fractionalPart;
            } catch (NumberFormatException nfe) {
                return 0;
            }
        }

        String long1000ToString(long l) {
            if (l == 0)
                return "0";
            String s = String.valueOf(l);
	    if (s.length() < 4)
                return "0";
            String newStr = s.substring(0, s.length()-3) +"."+ 
                s.substring(s.length()-2);
            return newStr;
        }
    }
}

